/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package date;//为用户自定义测试图片提供统一的接口

/**
 *
 * @author Raise
 */
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 测试图片管理器类 用于管理和加载测试用的图片文件，支持批量加载和状态查询
 */
//支持一次性加载多张照片，并记录每张照片的加载状态（不论是否成功，便于错误排查），
//单张照片加载失败不影响其他图片的处理
//内置了默认配置，用户只需上传对应文件名的照片，使用更加便捷
//使用三个列表分别管理路径、图像和加载状态，可以独立查询和管理三种数据信息
public class TestImageManager {

    // 图片路径列表 - 存储所有测试图片的文件路径
    private List<String> imagePaths;
    // 已加载的图片对象列表 - 存储成功加载的BufferedImage对象
    private List<BufferedImage> loadedImages;
    // 加载状态列表 - 记录每个图片的加载成功/失败状态
    private List<Boolean> loadStatus;

    /**
     * 构造函数 - 初始化管理器
     */
    public TestImageManager() {
        this.imagePaths = new ArrayList<>();     // 初始化路径列表
        this.loadedImages = new ArrayList<>();   // 初始化图片列表
        this.loadStatus = new ArrayList<>();     // 初始化状态列表
        initializeTestImages();  // 初始化内置测试图片路径
    }

    /**
     * 初始化测试图片路径 预先定义一组测试图片的文件名，用户需要准备这些图片文件
     */
    //初始化图片路径，预先定义一组测试图片的文件名，无需用户端再进行复杂配置，只需提供图片文件
    private void initializeTestImages() {

// 使用数字编号，让用户自由选择格式
        String[] paths = {
            "test1", "test2", "test3", "test4", "test5",
            "test6", "test7", "test8", "test9", "test10"
        };

        for (String baseName : paths) {
            // 优先尝试.jpg，如果不存在再尝试.png
            if (new File(baseName + ".jpg").exists()) {
                imagePaths.add(baseName + ".jpg");
            } else if (new File(baseName + ".png").exists()) {
                imagePaths.add(baseName + ".png");
            } else {
                imagePaths.add(baseName + ".jpg"); // 默认尝试.jpg
            }
        }
    }

    /**
     * 加载所有图片 遍历所有图片路径，尝试加载每个图片文件 记录加载状态，统计成功数量
     */
    public void loadAllImages() {
        loadedImages.clear();
        loadStatus.clear();
        int successCount = 0;

        // 遍历所有图片路径
        for (String path : imagePaths) {
            try {
                File file = new File(path);
                if (file.exists()) {
                    // 使用ImageIO读取图片文件，支持多种图片格式，代码更简洁
                    BufferedImage image = ImageIO.read(file);
                    loadedImages.add(image);     // 添加图片对象
                    loadStatus.add(true);        // 标记加载成功
                    successCount++;              // 成功计数增加
                    System.out.println("成功加载图片: " + path);
                } else {
                    // 遇到文件不存在的情况，程序不会崩溃，而是记录状态并继续处理其他图片
                    System.out.println("图片不存在: " + path);
                    loadedImages.add(null);      // 添加空位置
                    loadStatus.add(false);       // 标记加载失败
                }
            } catch (Exception e) {
                // 捕获加载过程中的异常（文件损坏、格式不支持等），增强程序健壮性，单张图片加载失败不会影响其他图片
                System.out.println("加载图片失败: " + path + " - " + e.getMessage());
                loadedImages.add(null);          // 添加空位置
                loadStatus.add(false);           // 标记加载失败
            }
        }

        System.out.println("图片加载完成: " + successCount + "/" + imagePaths.size() + " 成功");

    }

    //其他方法：获取图片数量、根据索引获取图片、获取图片路径、加载状态等
    public int getImageCount() {
        return imagePaths.size();
    }

    /**
     * 根据索引获取图片对象
     *
     * @param index 图片索引（0-based）
     * @return 对应的BufferedImage对象，如果索引无效或加载失败则返回null
     */
    public BufferedImage getImage(int index) {
        if (index >= 0 && index < loadedImages.size()) {
            return loadedImages.get(index);
        }
        return null;
    }

    /**
     * 根据索引获取图片文件路径
     *
     * @param index 图片索引（0-based）
     * @return 对应的文件路径字符串，如果索引无效则返回空字符串
     */
    public String getImagePath(int index) {
        if (index >= 0 && index < imagePaths.size()) {
            return imagePaths.get(index);
        }
        return "";
    }

    /**
     * 检查指定索引的图片是否成功加载
     *
     * @param index 图片索引（0-based）
     * @return true表示成功加载，false表示加载失败或索引无效
     */
    public boolean isImageLoaded(int index) {
        return index >= 0 && index < loadStatus.size() && loadStatus.get(index);
    }

    /**
     * 获取所有成功加载的图片路径列表
     *
     * @return 包含所有成功加载图片路径的列表
     */
    public List<String> getAvailableImagePaths() {
        List<String> available = new ArrayList<>();
        // 遍历所有图片，只添加成功加载的路径
        for (int i = 0; i < imagePaths.size(); i++) {
            if (isImageLoaded(i)) {
                available.add(imagePaths.get(i));
            }
        }
        return available;
    }
}
